#include <cstdio>
#include <algorithm>
#include <set>
#include <map>
#include <string>
#include <iostream>
using namespace std;
map<string,string> fa;
set<string> s;
string son,father;
string s1,s2;
int n,m;
int main(void){
    while(~scanf("%d",&n)){
        fa.clear();
        while(n--){
            cin >> father >> son;
            fa[son]=father;
        }
        scanf("%d",&m);
        while(m--){
            cin >> s1 >> s2;
            s.clear();
            while(fa.find(s1)!=fa.end()){
                s.insert(s1);
                s1=fa[s1];
            }
            //有可能不存在这个人的信息
            s.insert(s1);
            bool flag=false;
            int l=s.size();
            s.insert(s2);
            //s2就是s1的祖先
            if(l==s.size()){
                cout << s2 << endl;
                flag=true;
                continue;
            }
            //否则，跟s1一样依次向上找s2的祖先，每次都将祖先加入集合
            //判断集合的大小是否变了，如果没变，那这个加入的就是最近公共祖先
            //如果变了，就更新集合大小l
            else{
                l=s.size();
                while(fa.find(s2)!=fa.end()){
                    s2=fa[s2];
                    s.insert(s2);
                    if(l==s.size()){
                        cout << s2 << endl;
                        flag=true;
                        break;
                    }
                    else{
                        l=s.size();
                    }
                }
            }
            if(!flag){
                cout << -1 << endl;
            }
        }
    }
    return 0;
}